/* TZif文件的布局和位置。  */

#ifndef TZFILE_H

#define TZFILE_H

/*
 * 本文件属于公共领域，正如Arthur David Olson于
 * 1996-06-05所澄清的那样。
 *
 * 标识
 *	  src/timezone/tzfile.h
 */

/*
 * 此头文件仅供时间转换代码使用。
 * 不保证其会保持不变，
 * 或者会一直存在。
 * 请勿将其复制到任何系统包含目录。
 * 谢谢！
 */

/*
 * 关于时区文件的信息。
 */

#define TZDEFAULT	"/etc/localtime"
#define TZDEFRULES	"posixrules"


/* 有关以下格式的更多详细信息，请参见互联网RFC 8536。  */

/*
 * 每个文件以...开始
 */

#define	TZ_MAGIC	"TZif"

struct tzhead
{
	char		tzh_magic[4];	/* TZ_MAGIC */
	char		tzh_version[1]; /* '\0'或'2'或'3'（截至2013年） */
	char		tzh_reserved[15];	/* 预留字段；必须为零 */
	char		tzh_ttisutcnt[4];	/* 编码的转换时间标志数量 */
	char		tzh_ttisstdcnt[4];	/* 编码的转换时间标志数量 */
	char		tzh_leapcnt[4]; /* 编码的闰秒数量 */
	char		tzh_timecnt[4]; /* 编码的转换时间数量 */
	char		tzh_typecnt[4]; /* 编码的当地时间类型数量 */
	char		tzh_charcnt[4]; /* 编码的缩写字符数量 */
};

/*
 * ...接着是...
 *
 *	tzh_timecnt (char [4])s		以time(2)样式编码的转换时间
 *	tzh_timecnt (unsigned char)s	上述开始的当地时间类型
 *	tzh_typecnt次重复
 *		一个 (char [4])		以秒为单位编码的UT偏移
 *		一个 (unsigned char)	用于设置tm_isdst
 *		一个 (unsigned char)	这是一个缩写列表索引
 *	tzh_charcnt (char)s		以'\0'结束的时区缩写
 *	tzh_leapcnt次重复
 *		一个 (char [4])		编码的闰秒转换时间
 *		一个 (char [4])		上述之后的总校正
 *	tzh_ttisstdcnt (char)s		按类型索引；如果为1，转换
 *					时间为标准时间，如果为0，
 *					转换时间为当地（墙钟）
 *					时间；如果不存在，转换时间
 *					假定为当地时间
 *	tzh_ttisutcnt (char)s		按类型索引；如果为1，转换
 *					时间为UT，如果为0，转换时间为
 *					当地时间；如果不存在，转换
 *					时间假定为当地时间。
 *					当此值为1时，相应的
 *					std/wall指示器也必须为1。
 */

/*
 * 如果tzh_version为'2'或更高，上述内容后面跟随第二个实例
 * 的tzhead和第二个实例的数据，其中每个编码的转换
 * 时间使用8个字符而不是4个字符，
 * 然后是用于处理文件中存储的最后一个转换时间后瞬间的
 * POSIX-TZ环境变量样式字符串
 * （如果没有这些瞬间的POSIX表示，则在换行符之间没有内容）。
 *
 * 如果tz_version为'3'或更高，上述内容扩展为如下。
 * 首先，POSIX TZ字符串的小时偏移范围可从-167
 * 到167，而与POSIX要求的0到24相比。
 * 其次，它的夏令时开始时间可以是1月1日的00:00，结束
 * 时间可以是12月31日的24:00加上夏令时与
 * 标准时间之间的差异，表示夏令时全年。
 */

/*
 * 在当前实现中，"tzset()"拒绝处理超过以下任何 
 * 限制的文件。
 */

#define TZ_MAX_TIMES	2000

/* 对于Europe/Samara和Europe/Vilnius，这个值必须至少为17。  */
#define TZ_MAX_TYPES	256		/* 受限于(unsigned char)能容纳的内容 */
/* 最大缩写字符数 */
/* （受限于unsigned char能容纳的内容） */
/* 最大闰秒修正数 */
/* !defined TZFILE_H */

#define TZ_MAX_CHARS	50		/* Maximum number of abbreviation characters */
 /* (limited by what unsigned chars can hold) */

#define TZ_MAX_LEAPS	50		/* Maximum number of leap second corrections */

#endif							/* !defined TZFILE_H */
